箭头函数的写法:
箭头函数相当于匿名函数,它的写法是:
x => x*x
它相当于
fucntion (x){
return x*x;
}
可以看到,只有一条语句的箭头函数省略了括号与return
。如果含有多条表达式,那么就不能省略{}
与return
:
x => {
if(x>0){
return x*x;
}else{
return -x*x;
}
}
如果函数多个参数,那么小括号()
也不能省略:
// 两个参数:
(x, y) => x * x + y * y
// 无参数:
() => 3.14
// 可变参数:
(x, y, ...rest) => {
var i, sum = x + y;
for (i=0; i<rest.length; i++) {
sum += rest[i];
}
return sum;
}
如果要返回一个表达式的话,这样写会报错:
x => {foo.x}
因为和函数体的{...}
有冲突,所以要改为:
x => ({foo.x})
this指向的修复
不使用箭头函数的时候,在对象的方法中使用this需要使用hack写法:
var obj = {
birth: 1990,
getAge: function () {
var _this = this;
var fn = function () {
return new Date().getFullYear() - _this.birth; // this指向window或undefined
};
return fn();
}
};
现在,箭头函数完全修复了this
的指向,this
总是指向词法作用域,也就是外层调用者obj
:
var obj = {
birth: 1990,
getAge: function () {
var b = this.birth; // 1990
var fn = () => new Date().getFullYear() - this.birth; // this指向obj对象
return fn();
}
};
obj.getAge(); // 25
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。